1、二维数组中查找，数组是有序的
思想：因为有序，所以可以从右上角到左下角去寻找；
class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        if(matrix.empty())
            return false;
        int row=matrix.size();
        int col=matrix[0].size();
        
        int i=0;//表示行
        int j=col-1;//表示列
        //右上角开始往左下角找
        while(i<row&&j>=0)
        {
            if(matrix[i][j]==target)
                return true;
            else if(matrix[i][j]>target)
                j--;
            else if(matrix[i][j]<target)
                i++;
        }
        return false;
    }
};

2、青蛙跳台阶问题，可以不建数组，用3个变量一次替换
class Solution {
public:
    int numWays(int n) {
        if(n==0)
            return 1;
        if(n==1)
            return 1;
        int a=1;
        int b=1;
        int ans=0;
        for(int i=2;i<=n;i++)
        {
            ans=(a+b)%1000000007;
            a=b;
            b=ans;
        }
        return ans;
    }
};
3、旋转数组的最小数字
思想：二分，以后看见有序，一定要想得到二分，不管时全有序，还是部分有序
class Solution {
public:
    int minArray(vector<int>& numbers) {
        int l=0;
        int r=numbers.size()-1;
        while(l<r)
        {
            int mid=(l+r)/2;
            if(numbers[mid]>numbers[r])
                l=mid+1;
            else if(numbers[mid]<numbers[r])
                r=mid;
            else
                r--;
        }
        return numbers[l];
    }
};

4、